/**
 * 2009/12/12
 */
package com.googlecode.derby.customize;

import java.util.List;

/**
 * @author o.tanaka
 */
public interface DbInfo {

    /**
     * callableStatementメソッド.
     * 
     * @return DbInfo
     */
    DbInfo callableStatement();

    /**
     * Connection.closeメソッド.
     */
    void close();

    /**
     * commitメソッド.
     * 
     * @return DbInfo
     */
    DbInfo commit();

    /**
     * Connectionメソッド.
     */
    void connection();

    /**
     * createStatementメソッド.
     * 
     * @return DbInfo
     */
    DbInfo createStatement();

    /**
     * @param aList
     *            data class
     */
    void delete(List<?> aList);

    /**
     * @return autoCommit
     */
    boolean getAutoCommit();

    /**
     * @return Object
     */
    Object getBindData();

    /**
     * @return dbname
     */
    String getDbname();

    /**
     * executeUpdateの更新件数取得メソッド.
     * 
     * @return UPDATEまたはDELETEの件数を取得
     */
    long getExecuteUpdateCnt();

    /**
     * @return password
     */
    String getPassword();

    /**
     * @return query
     */
    String getQuery();

    /**
     * @return List<ResultData>
     */
    List<ResultData> getResultDatas();

    /**
     * @param maxCount
     *            最大件数
     * @return DbInfo
     */
    List<ResultData> getResultDatas(final long maxCount);

    /**
     * @param bgnRownum
     *            開始件数
     * @param endRownum
     *            終了件数
     * @return DbInfo
     */
    List<ResultData> getResultDatas(
            final long bgnRownum,
            final long endRownum);

    /**
     * @return user
     */
    String getUser();

    /**
     * @return List<BindData>
     */
    List<BindData> getWhereBindDataz();

    /**
     * @param aList
     *            table class
     * @param aNotOverride
     *            DbConst.NOT_OVERRIDE
     * @return DbInfo
     */
    DbInfo insertUpdate(List<?> aList, String aNotOverride);

    /**
     * @return true/false
     */
    boolean isConnectionClose();

    /**
     * @return create table is true
     */
    boolean isCreateTable();

    /**
     * @param aColumn
     *            column class
     * @return DbInfo
     */
    DbInfo orderby(String aColumn);

    /**
     * preparedStatementメソッド.
     * 
     * @return DbInfo
     */
    DbInfo preparedStatement();

    /**
     * registerOutParameterメソッド.
     * 
     * @param parameterIndex
     *            int
     * @param sqlType
     *            sql.Types
     */
    void registerOutParameter(
            final int parameterIndex,
            final int sqlType);

    /**
     * registerOutParameterメソッド.
     * 
     * @param parameterIndex
     *            int
     * @param sqlType
     *            sql.Types
     * @param scale
     *            int
     */
    void registerOutParameter(
            final int parameterIndex,
            final int sqlType,
            final int scale);

    /**
     * registerOutParameterメソッド.
     * 
     * @param parameterIndex
     *            int
     * @param sqlType
     *            sql.Types
     * @param typeName
     *            int
     */
    void registerOutParameter(
            final int parameterIndex,
            final int sqlType,
            final String typeName);

    /**
     * roll backメソッド.
     */
    void rollback();

    /**
     * @param aObject
     *            bind data class
     * @return DbInfo
     */
    DbInfo select(final Object aObject);

    /**
     * @return DbInfo
     */
    DbInfo selects();

    /**
     * Connectionトランザクションメソッド.<br/>
     * setAutoCommit(false);<--明示的にコミットをしなければ、コミットされない<br/>
     * setAutoCommit(true);<--execute毎に、コミットされる<br/>
     * 
     * @param b
     *            "false"または"true"をセット
     */
    void setAutoCommit(final boolean b);

    /**
     * @param aObject
     *            bind data
     */
    void setBindData(Object aObject);

    /**
     * @param query
     *            Sql Query
     * @return DbInfo
     */
    DbInfo setQuery(String query);

    /**
     * Connection読み取り専用メソッド.<br/>
     * setReadOnly(false);<--読取専用ではない<br/>
     * setReadOnly(true);<--読取専用<br/>
     * 
     * @param b
     *            "false"または"true"をセット
     */
    void setReadOnly(final boolean b);

    /**
     * @param aClass
     *            table class
     * @return true/false
     */
    boolean table(final Class<?> aClass);

    /**
     * @param aClass
     * @return true/false
     */
    boolean tables(Class<?>... aClass);

    /**
     * @param aSql
     *            sql
     * @param aObjects
     *            data class
     * @return DbInfo
     */
    DbInfo where(String aSql, Object... aObjects);

}
